在前一篇文章中,向大家介紹了 Neo4j 各種預存資料集與圖形資料庫應用,但相信在大部分的情況,我們手邊已經有累積的資料和檔案,這時候就需要匯入工具,今天就來介紹如何匯入 CSV 檔案到 Neo4j 資料庫。
Neo4j 預設情況下,基於安全性的考量,要匯入的 csv 檔案必須先放到該資料庫的 Import Folder,每個資料庫的位置不同,以我系統 Mac OS 取得的某個資料庫的 Import Folder 如下
/Users/egghsu/Library/Application Support/com.Neo4j.Relate/Data/dbmss/dbms-5aab44e4-5d1d-4b91-94ef-84a7653d534f/import
查詢 Import Folder 的步驟,先點選資料庫的 Manage
接著在 Open Folder 中選擇 Import 即可
把 CSV 檔案複製到 Import Folder 之後就可以開始操作了,檔案都必須以 file:///
作為開頭,以下直接提供範例
從 movies.csv 讀入資料,一次讀取一行,並列出前面十行的內容。這部分只是讀取 CSV,並沒有建立或匯入任何圖形資料庫。
LOAD CSV FROM "file:///movies.csv" AS line
RETURN line
LIMIT 10
CSV 也可以是網路位置
LOAD CSV FROM "http://www.somewhere/movies.csv" AS line
RETURN line
LIMIT 10
從 movies.csv 讀入資料,一次讀取一行,並將第一欄作為 title 屬性,第二欄作為 released 屬性建立 Movie 節點。
LOAD CSV FROM "file:///movies.csv" AS line
CREATE (:Movie { title: line[0], released: line[1]})
與前例相同,差別是有引用 CSV Header,語法更直覺。另外,也可以自訂 CSV 分隔符號。
LOAD CSV WITH HEADERS FROM "file:///movies.csv" AS line FIELDTERMINATOR ';'
CREATE (:Movie { title: line.title, released: line.released})
不過實務上,匯入 CSV 如果會是個定期作業,當然就無法總是透過 Neo4j Browser 操作,建議用 cypher-shell
命令列工具會更有彈性,以下舉例,暫不做深入介紹。
bin/cypher-shell -u neo4j -p neo4j 'LOAD CSV FROM "file:///movies.csv" AS line RETURN line LIMIT 5'
如果要匯入的 CSV 資料量相當大,建議多加上 USING PERIODIC COMMIT
敘述,讓 Neo4j 每匯入一定數量的資料行之後就 commit,避免在交易過程中耗費大量記憶體。因為整個 LOAD CSV 預設就是一筆交易,只有全部成功或是全部失敗,但 CSV 檔案太大就會導致 Neo4j 一直在讀取而無法完成交易,最後記憶體就會耗盡。
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///movies.csv" AS line
CREATE (:Movie { title: line.title, released: line.released})
PERIODIC COMMIT 預設是每 1000 筆就 commit一次,你可以修改預設值如下,改為 2000 筆 commit 一次。
USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:///movies.csv" AS line
CREATE (:Movie { title: line.title, released: line.released})
以上是今天的分享,主要是以 Cypher 語法的方式匯入 CSV 檔案,之後再介紹其他方式囉,謝謝您的閱讀~